Angular অ্যাপ্লিকেশন গঠন করার জন্য মডিউল (Modules) অত্যন্ত গুরুত্বপূর্ণ একটি ধারণা। একটি Angular মডিউল হলো অ্যাপ্লিকেশনের কোডের একটি লজিক্যাল কন্টেইনার, যেখানে সম্পর্কিত ফিচার বা কম্পোনেন্ট, সার্ভিস, পিপেল, ডিরেক্টিভস এবং অন্যান্য উপাদান একত্রিত হয়। মডিউল ব্যবহারের মাধ্যমে কোডকে আরও সংগঠিত এবং স্কেলেবল করা যায়। Angular অ্যাপ্লিকেশনকে বিভিন্ন মডিউলে ভাগ করা যায়, যাতে বড় অ্যাপ্লিকেশনগুলোও সহজে মেইন্টেইন করা যায়।
Angular-এ মডিউল হলো একটি ক্লাস, যা অ্যাপ্লিকেশনের বিভিন্ন অংশ (যেমন কম্পোনেন্ট, সার্ভিস, ডিরেক্টিভস, পাইপ, ইত্যাদি) একত্রিত করে। প্রতিটি Angular অ্যাপ্লিকেশন একটি মূল মডিউল (Root Module) দিয়ে শুরু হয়, এবং অতিরিক্ত মডিউল ব্যবহার করে অ্যাপ্লিকেশনটিকে আরও ভাগ করা যায়।
এখানে একটি সাধারণ Angular মডিউলের গঠন দেখানো হলো:
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent // কম্পোনেন্ট, ডিরেক্টিভস, পাইপ
],
imports: [
BrowserModule // অন্য মডিউলগুলোকে অন্তর্ভুক্ত করা
],
providers: [],
bootstrap: [AppComponent] // অ্যাপ্লিকেশনকে কোথা থেকে শুরু করতে হবে
})
export class AppModule { }
এখানে:
প্রতিটি Angular অ্যাপ্লিকেশন একটি মূল মডিউল (Root Module) দিয়ে শুরু হয়। সাধারণত, এই মডিউলটি AppModule হিসেবে পরিচিত। এটি অ্যাপ্লিকেশনের সব মডিউল এবং কম্পোনেন্টকে একত্রিত করে এবং অ্যাপ্লিকেশনটি চালু করার জন্য একটি শুরু পয়েন্ট সরবরাহ করে।
Feature Module হলো Angular অ্যাপ্লিকেশনের একটি স্বতন্ত্র অংশ যা নির্দিষ্ট ফিচারের সাথে সম্পর্কিত থাকে। যেমন, একটি ই-কমার্স অ্যাপ্লিকেশনে Product Module, Cart Module ইত্যাদি থাকতে পারে। Feature মডিউলগুলি মূল মডিউলের বাইরে থাকে এবং বড় অ্যাপ্লিকেশনকে আরও মডুলার এবং স্কেলেবল করে।
Shared Module এমন মডিউল যা বিভিন্ন মডিউল বা কম্পোনেন্টের মধ্যে সাধারণ কম্পোনেন্ট, সার্ভিস, পাইপ ইত্যাদি শেয়ার করতে ব্যবহৃত হয়। সাধারণত, এমন কম্পোনেন্ট বা ডিরেক্টিভস যে গুলো একাধিক মডিউলে ব্যবহৃত হয়, সেগুলি একটি Shared Module-এ রাখে।
Lazy Loading হলো Angular-এ একটি কৌশল যেখানে অ্যাপ্লিকেশনের মডিউলগুলি প্রয়োজনের সময় লোড করা হয়, যাতে অ্যাপ্লিকেশনটি প্রথমে দ্রুত লোড হতে পারে। এই মডিউলগুলি শুধুমাত্র যখন ব্যবহারকারীর প্রয়োজন হয়, তখনই লোড হয়।
Angular অ্যাপ্লিকেশনে রাউটিং ব্যবহারে মডিউলগুলির মধ্যে Lazy Loading করতে পারা যায়। এর মাধ্যমে, একাধিক মডিউলকে আলাদা করে রাউটিং কনফিগারেশন দিয়ে লোড করা যায়। এটি অ্যাপ্লিকেশনটির পারফরম্যান্স বাড়াতে সাহায্য করে।
const routes: Routes = [
{ path: 'home', loadChildren: () => import('./home/home.module').then(m => m.HomeModule) },
{ path: 'about', loadChildren: () => import('./about/about.module').then(m => m.AboutModule) }
];
এখানে, home এবং about মডিউলগুলি lazy load করা হয়েছে। অর্থাৎ, এই মডিউলগুলি কেবল তখনই লোড হবে যখন ব্যবহারকারী উপযুক্ত রুটে যাবে।
Angular মডিউলগুলি অ্যাপ্লিকেশনের কাঠামো তৈরি করতে গুরুত্বপূর্ণ ভূমিকা পালন করে। এগুলি কোডের পুনঃব্যবহারযোগ্যতা, স্কেলেবিলিটি এবং রক্ষণাবেক্ষণযোগ্যতা বৃদ্ধি করে। Angular মডিউল ব্যবহার করে অ্যাপ্লিকেশনটি মডুলার, সুসংগঠিত এবং কার্যকরভাবে পরিচালনা করা যায়।
Angular অ্যাপ্লিকেশনে রুট মডিউল (বা AppModule) হলো মূল মডিউল যা পুরো অ্যাপ্লিকেশনটির কেন্দ্রীয় মডিউল হিসেবে কাজ করে। এটি Angular অ্যাপ্লিকেশনটির ইনিশিয়াল কনফিগারেশন এবং স্টার্টিং পয়েন্ট হিসেবে কাজ করে। AppModule-এ অ্যাপ্লিকেশনটির প্রয়োজনীয় মডিউল, কম্পোনেন্ট, সার্ভিস এবং অন্যান্য ডিপেন্ডেন্সি কনফিগার করা হয়।
AppModule হলো Angular অ্যাপ্লিকেশনটির মুল মডিউল। এটি অ্যাপ্লিকেশনটির অন্যান্য সব মডিউল এবং কম্পোনেন্টকে একত্রিত করে এবং অ্যাপ্লিকেশনটির স্ট্রাকচার সেটআপ করে। যখন Angular অ্যাপ্লিকেশন শুরু হয়, তখন AppModule-কে প্রথমে লোড করা হয়। এর মধ্যে ব্যবহৃত ডেকোরেটর @NgModule
অ্যাপ্লিকেশনটির বিভিন্ন অংশ যেমন কম্পোনেন্ট, ডিরেক্টিভ, পাইপ, এবং সার্ভিস সম্পর্কে Angular-কে জানিয়ে দেয়।
Angular অ্যাপ্লিকেশনের রুট মডিউল বা AppModule সাধারণত app.module.ts
ফাইলে থাকে। এর মধ্যে @NgModule
ডেকোরেটরের মাধ্যমে অ্যাপ্লিকেশনের মডিউল, কম্পোনেন্ট এবং অন্যান্য ডিপেন্ডেন্সি কনফিগার করা হয়।
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module'; // রাউটিং মডিউল
@NgModule({
declarations: [
AppComponent, // কম্পোনেন্ট ডিক্লেয়ারেশন
],
imports: [
BrowserModule, // ব্রাউজার মডিউল
AppRoutingModule, // রাউটিং কনফিগারেশন
],
providers: [], // সার্ভিস এবং অন্যান্য ডিপেন্ডেন্সি
bootstrap: [AppComponent] // অ্যাপ্লিকেশনটি যেটি দিয়ে শুরু হবে
})
export class AppModule { }
@NgModule
ডেকোরেটরAngular-এ মডিউল কনফিগারেশন করতে @NgModule
ডেকোরেটর ব্যবহার করা হয়। এটি মূলত একটি মেটাডেটা অ্যানোটেশন যা Angular-কে নির্দেশ দেয় কোন ক্লাসগুলি, কম্পোনেন্টগুলি এবং মডিউলগুলি অ্যাপ্লিকেশনটির অংশ হিসেবে যুক্ত হবে।
@NgModule
এর অংশগুলি:declarations: এই অংশে অ্যাপ্লিকেশনের সমস্ত কম্পোনেন্ট, ডিরেক্টিভ এবং পাইপ ঘোষণা করা হয়। প্রতিটি কম্পোনেন্টের জন্য একটি আলাদা এন্ট্রি থাকে।
উদাহরণ:
declarations: [AppComponent]
এখানে AppComponent
হলো অ্যাপ্লিকেশনের প্রধান কম্পোনেন্ট।
imports: এই অংশে অ্যাপ্লিকেশনের অন্যান্য মডিউলগুলোকে অন্তর্ভুক্ত করা হয়, যেমন BrowserModule
, FormsModule
, অথবা আপনার নিজস্ব রাউটিং মডিউল।
উদাহরণ:
imports: [BrowserModule, AppRoutingModule]
providers: অ্যাপ্লিকেশনের সার্ভিস বা ডিপেন্ডেন্সি এখানে ঘোষণা করা হয়। সাধারণত সার্ভিসের ইনজেকশন ব্যবস্থাপনার জন্য এই অংশ ব্যবহার হয়। এটি কোডে কোথাও ব্যবহার করার জন্য সার্ভিস বা ডিপেন্ডেন্সি সরবরাহ করে।
উদাহরণ:
providers: [UserService]
bootstrap: অ্যাপ্লিকেশনটির যেকোনো এক কম্পোনেন্ট যেটি প্রথম লোড হবে, তাকে bootstrap
অ্যারে তে ঘোষণা করা হয়। সাধারণত এটি AppComponent
হয়।
উদাহরণ:
bootstrap: [AppComponent]
Angular অ্যাপ্লিকেশন শুরু হওয়ার সময় AppModule প্রথমে লোড হয়। এটি মূল রুট কম্পোনেন্ট AppComponent
কে ইনিশিয়ালাইজ করে, এবং তারপর রাউটিং বা অন্যান্য ফিচার গুলি কার্যকর করতে অন্যান্য মডিউল এবং কম্পোনেন্টগুলিকে লোড করা হয়। Angular এই প্রক্রিয়া সম্পন্ন করার পর, অ্যাপ্লিকেশনটি কাজ শুরু করে।
UserModule
, AdminModule
, ইত্যাদি। এতে কোড আরও মডুলার হয়ে ওঠে এবং রক্ষণাবেক্ষণ সহজ হয়।AppRoutingModule
, যা AppModule
-এ ইমপোর্ট করা হয়। এর মাধ্যমে এক পেজ থেকে অন্য পেজে নেভিগেশন পরিচালনা করা হয়।AppModule হলো Angular অ্যাপ্লিকেশনের মূল মডিউল যা অ্যাপ্লিকেশনের সমস্ত কম্পোনেন্ট এবং মডিউলকে একত্রিত করে। এটি @NgModule
ডেকোরেটরের মাধ্যমে অ্যাপ্লিকেশনের কনফিগারেশন পরিচালনা করে এবং অ্যাপ্লিকেশন লোডের শুরুতেই কার্যকর হয়। AppModule কম্পোনেন্ট, সার্ভিস, রাউটিং এবং অন্যান্য গুরুত্বপূর্ণ ডিপেন্ডেন্সির জন্য একটি সেন্ট্রাল কনফিগারেশন পয়েন্ট হিসেবে কাজ করে।
Angular অ্যাপ্লিকেশন গুলোর মধ্যে মডুলার আর্কিটেকচার ব্যবহার করা অত্যন্ত গুরুত্বপূর্ণ। ফিচার মডিউলস হলো সেই মডিউলগুলো যেগুলি অ্যাপ্লিকেশনের নির্দিষ্ট ফিচার বা কার্যকারিতা (features) এর জন্য তৈরি হয়। এই মডিউলগুলো কম্পোনেন্ট, সার্ভিস, ডিরেক্টিভ, পাইপ ইত্যাদি উপাদানগুলিকে একত্রিত করে একটি নির্দিষ্ট ফিচার বা সেগমেন্টের জন্য।
ফিচার মডিউল ব্যবহারের মাধ্যমে অ্যাপ্লিকেশনটি আরও স্কেলেবল, পুনরায় ব্যবহারযোগ্য এবং মেইনটেনেবল হয়। এটি বড় অ্যাপ্লিকেশন গুলোর জন্য একটি ভাল স্ট্রাকচার প্রদান করে, যেখানে প্রতিটি ফিচার বা কার্যকারিতা আলাদাভাবে কাজ করে।
ফিচার মডিউল তৈরি করতে Angular CLI ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, একটি User ফিচার মডিউল তৈরি করা:
ng generate module user
এটি user
নামে একটি নতুন মডিউল তৈরি করবে, যেটিতে কম্পোনেন্ট, সার্ভিস ইত্যাদি অন্তর্ভুক্ত করা যাবে।
একটি ফিচার মডিউল সাধারণত একটি নির্দিষ্ট ফিচারের জন্য সমস্ত উপাদান (কম্পোনেন্ট, সার্ভিস, ডিরেক্টিভ ইত্যাদি) সংগঠিত করে। একটি অ্যাপ্লিকেশন বা প্রধান মডিউলে ফিচার মডিউলটিকে import করতে হয়।
UserModule
ফিচার মডিউল user
এর মধ্যে বিভিন্ন কম্পোনেন্ট এবং সার্ভিস থাকতে পারে। প্রথমে user.module.ts
ফাইল তৈরি করা হবে:
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { UserComponent } from './user.component';
import { UserService } from './user.service';
@NgModule({
declarations: [
UserComponent
],
imports: [
CommonModule
],
providers: [UserService],
exports: [UserComponent] // যদি অন্য মডিউলে ব্যবহারের জন্য এক্সপোর্ট করতে চান
})
export class UserModule { }
এখানে:
UserComponent
হলো user
ফিচারের কম্পোনেন্ট।UserService
হলো user
ফিচারের সার্ভিস।CommonModule
-এ Angular এর কমন ডিরেক্টিভস (যেমন ngIf
, ngFor
) অন্তর্ভুক্ত থাকে।import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { UserModule } from './user/user.module'; // ফিচার মডিউল ইম্পোর্ট করা
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
UserModule // এখানে ফিচার মডিউল যুক্ত করা হচ্ছে
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
এখানে, UserModule
কে AppModule
-এ অন্তর্ভুক্ত করা হয়েছে, যাতে UserComponent
এবং UserService
অ্যাপ্লিকেশনের অন্যান্য অংশে ব্যবহার করা যেতে পারে।
Angular-এ Lazy Loading ব্যবহার করে ফিচার মডিউল গুলো পেজ লোডের সময় অপ্রয়োজনীয় ফিচার মডিউল লোড না করে, যখন প্রয়োজন হবে তখন সেই মডিউল লোড করা হয়। এটি অ্যাপ্লিকেশনের পারফরম্যান্স উন্নত করে।
ফিচার মডিউলকে লেজি লোড করার জন্য রাউটিং কনফিগারেশন ব্যবহার করা হয়:
const routes: Routes = [
{ path: 'user', loadChildren: () => import('./user/user.module').then(m => m.UserModule) }
];
এখানে:
loadChildren
ব্যবহার করে Angular রাউটার নির্দেশ করে যে UserModule
কে তখনই লোড করতে হবে যখন /user
রাউটটি অ্যাক্সেস করা হবে।Angular অ্যাপ্লিকেশনে শেয়ার্ড মডিউলস (Shared Modules) হল এমন একটি মডিউল যা সাধারণত অ্যাপ্লিকেশনটির বিভিন্ন অংশে পুনরায় ব্যবহৃত উপাদান (কম্পোনেন্ট, ডিরেক্টিভ, পাইপ) এবং সার্ভিস সরবরাহ করার জন্য ব্যবহৃত হয়। যখন একই কম্পোনেন্ট বা ডিরেক্টিভ একাধিক মডিউলে ব্যবহৃত হতে থাকে, তখন এগুলো একটি শেয়ার্ড মডিউলে স্থানান্তর করা হয়, যাতে কোড পুনঃব্যবহারযোগ্য এবং রক্ষণাবেক্ষণযোগ্য হয়।
শেয়ার্ড মডিউলস আপনার অ্যাপ্লিকেশনের কোড কাঠামোকে আরও মডুলার এবং স্কেলেবল করে তোলে। এটি এমন একটি সেন্ট্রালাইজড স্থান যেখানে কম্পোনেন্ট বা সার্ভিস গুলো একবার তৈরি করা হয় এবং অ্যাপ্লিকেশনের অন্যান্য অংশে ব্যবহার করা হয়।
প্রথমে, Angular CLI ব্যবহার করে একটি শেয়ার্ড মডিউল তৈরি করতে পারেন:
ng generate module shared
এটি একটি নতুন মডিউল তৈরি করবে, যেটি সাধারণত shared.module.ts
নামে থাকবে। এই মডিউলটিতে আপনি সেই সব কম্পোনেন্ট, ডিরেক্টিভ, পাইপ এবং সার্ভিসগুলো স্থানান্তর করবেন যেগুলো বিভিন্ন মডিউলে ব্যবহৃত হবে।
ধরা যাক, আপনার অ্যাপ্লিকেশনে একটি সাধারণ ButtonComponent এবং HighlightDirective রয়েছে, যা বিভিন্ন মডিউলে ব্যবহৃত হতে পারে। এই দুটি উপাদান শেয়ার্ড মডিউলে স্থানান্তর করা হবে।
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { ButtonComponent } from './button/button.component';
import { HighlightDirective } from './highlight.directive';
@NgModule({
declarations: [
ButtonComponent,
HighlightDirective
],
imports: [
CommonModule
],
exports: [
ButtonComponent,
HighlightDirective
]
})
export class SharedModule { }
এখানে:
declarations
: এখানে আমরা সেই কম্পোনেন্ট এবং ডিরেক্টিভগুলি ডিক্লেয়ার করেছি, যেগুলো শেয়ার্ড মডিউলে অন্তর্ভুক্ত হবে।exports
: এটি অন্য মডিউলগুলোতে শেয়ারড কম্পোনেন্ট বা ডিরেক্টিভগুলি ব্যবহারের অনুমতি দেয়।যেহেতু শেয়ার্ড মডিউলে কিছু কম্পোনেন্ট বা ডিরেক্টিভ ঘোষণা করা হয়েছে, এটি অন্যান্য মডিউল থেকে ব্যবহার করার জন্য imports
অ্যারে তে অন্তর্ভুক্ত করতে হবে।
যেমন, আপনি যদি AppModule
বা অন্য কোনো মডিউলে শেয়ার্ড মডিউল ব্যবহার করতে চান, তাহলে আপনাকে SharedModule
-কে ইমপোর্ট করতে হবে:
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { SharedModule } from './shared/shared.module';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
SharedModule // শেয়ার্ড মডিউল ইমপোর্ট
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
এখানে, SharedModule
-কে imports
অ্যারে তে অন্তর্ভুক্ত করা হয়েছে, যাতে ButtonComponent
এবং HighlightDirective
অ্যাপ্লিকেশনের অন্য অংশে ব্যবহৃত হতে পারে।
শেয়ার্ড মডিউলস Angular অ্যাপ্লিকেশনে কোড পুনঃব্যবহারযোগ্যতা বৃদ্ধি করে, অ্যাপ্লিকেশনের কাঠামোকে মডুলার এবং স্কেলেবল করে তোলে। এটি কম্পোনেন্ট, ডিরেক্টিভ, পাইপ এবং সার্ভিসের মতো উপাদানগুলোকে একক স্থানে সংরক্ষণ করে এবং অন্যান্য মডিউলে সহজে ব্যবহার করার সুযোগ দেয়।
ল্যাজি লোডিং (Lazy Loading) হলো একটি টেকনিক যেখানে নির্দিষ্ট মডিউল বা রুট শুধুমাত্র যখন প্রয়োজন হবে তখন লোড করা হয়। এর ফলে অ্যাপ্লিকেশনটির প্রথম লোডিং সময় কমে যায় এবং বাকি মডিউলগুলো পরে লোড করা হয়। এটি অ্যাপ্লিকেশনের পারফর্মেন্স উন্নত করতে সাহায্য করে, কারণ মডিউলগুলো কেবল তখনই লোড হয় যখন ব্যবহারকারী সেই রুট বা পেজে পৌঁছায়।
Angular-এ ল্যাজি লোডিং কনফিগার করার জন্য Angular Router ব্যবহার করা হয় এবং মডিউলগুলোকে আলাদাভাবে লোড করা হয়।
ল্যাজি লোডিং সক্ষম করতে, রাউটিং কনফিগারেশনে loadChildren
প্রপার্টি ব্যবহার করা হয়। এর মাধ্যমে নির্দিষ্ট মডিউলটি অ্যাসিনক্রোনাসভাবে লোড করা হয়।
ধরা যাক, আপনার অ্যাপ্লিকেশনে দুটি মডিউল রয়েছে—HomeModule এবং AboutModule। আপনি চাচ্ছেন যে AboutModule কেবল তখনই লোড হোক যখন ব্যবহারকারী /about
রুটে যাবে।
AboutModule
:ng generate module about --route about --module app-routing
এটি স্বয়ংক্রিয়ভাবে রাউটিং কনফিগারেশন তৈরি করে এবং Lazy Loading সক্ষম করে।
app-routing.module.ts
ফাইলে ল্যাজি লোডিং কনফিগারেশন করুন:import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { HomeComponent } from './home/home.component';
const routes: Routes = [
{ path: '', component: HomeComponent },
{ path: 'about', loadChildren: () => import('./about/about.module').then(m => m.AboutModule) }
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
এখানে, loadChildren
ব্যবহার করা হয়েছে AboutModule
কে ল্যাজি লোড করার জন্য। import()
সিনট্যাক্সটি ECMAScript dynamic import ব্যবহার করে মডিউলটি অ্যাসিনক্রোনাসভাবে লোড করবে।
AboutModule
তৈরি করার সময় নিশ্চিত করতে হবে যে এর নিজস্ব রাউটিং কনফিগারেশন রয়েছে।
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { AboutComponent } from './about/about.component';
const routes: Routes = [
{ path: '', component: AboutComponent }
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class AboutRoutingModule { }
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { AboutComponent } from './about/about.component';
import { AboutRoutingModule } from './about-routing.module';
@NgModule({
declarations: [AboutComponent],
imports: [
CommonModule,
AboutRoutingModule
]
})
export class AboutModule { }
এখানে AboutModule
নিজে একটি স্বাধীন মডিউল হিসেবে তৈরি করা হয়েছে এবং এর মধ্যে AboutRoutingModule
ব্যবহৃত হয়েছে, যা রাউটিং কনফিগারেশন করে।
Preloading Strategy: আপনি যদি চান যে কিছু ল্যাজি লোডিং মডিউল প্রিলোড করা হোক, তাহলে Angular-এ Preloading Strategy ব্যবহার করা যেতে পারে। Angular CLI-এর মাধ্যমে আপনি প্রিলোড স্ট্র্যাটেজি কনফিগার করতে পারেন:
import { NgModule } from '@angular/core';
import { RouterModule, Routes, PreloadAllModules } from '@angular/router';
const routes: Routes = [
{ path: '', component: HomeComponent },
{ path: 'about', loadChildren: () => import('./about/about.module').then(m => m.AboutModule) }
];
@NgModule({
imports: [
RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules })
],
exports: [RouterModule]
})
export class AppRoutingModule { }
এতে করে PreloadAllModules স্ট্র্যাটেজি ব্যবহৃত হলে অ্যাপ্লিকেশন লোড হওয়ার পরে সব ল্যাজি লোডিং মডিউল একে একে লোড হতে থাকবে।
ল্যাজি লোডিং একটি অত্যন্ত কার্যকর পদ্ধতি যা Angular অ্যাপ্লিকেশনের পারফর্মেন্স উন্নত করতে সাহায্য করে। এটি মডিউলগুলোকে অ্যাসিনক্রোনাসভাবে লোড করার সুযোগ দেয়, যার ফলে প্রথম লোডিং সময় কমে যায় এবং মেমরি ব্যবস্থাপনা আরও উন্নত হয়। Angular রাউটিং কনফিগারেশনে loadChildren
ব্যবহার করে ল্যাজি লোডিং কার্যকর করা যায়, এবং বিভিন্ন রাউটগুলোর জন্য প্রয়োজনীয় মডিউল কেবল তখনই লোড করা হয়, যখন তা ব্যবহারকারী দেখতে চান।
Angular অ্যাপ্লিকেশন গুলোর সাফল্য এবং স্কেলেবিলিটি নির্ভর করে এর মডিউল অর্গানাইজেশন এবং স্ট্রাকচার এর উপর। সঠিকভাবে মডিউল অর্গানাইজেশন করলে অ্যাপ্লিকেশনটিকে সহজে স্কেল করা যায়, পুনঃব্যবহারযোগ্য এবং মেইনটেইনেবল রাখা যায়। এখানে কিছু বেস্ট প্রাকটিসেস আলোচনা করা হবে, যা Angular অ্যাপ্লিকেশনকে আরও শক্তিশালী এবং রক্ষণাবেক্ষণযোগ্য করে তুলবে।
ফিচার-বেসড মডিউল ডিজাইন হলো Angular অ্যাপ্লিকেশনকে একাধিক ফিচারের (যেমন, ইউজার ম্যানেজমেন্ট, প্রোডাক্ট ম্যানেজমেন্ট) জন্য আলাদা আলাদা মডিউলে বিভক্ত করা।
src/
app/
user/
user.module.ts
user.component.ts
user.service.ts
product/
product.module.ts
product.component.ts
product.service.ts
shared/
shared.module.ts
shared.service.ts
utilities.ts
এখানে, user
এবং product
মডিউল আলাদা আলাদা ফিচারগুলোর জন্য তৈরি করা হয়েছে, এবং shared
মডিউলটি সাধারণ সার্ভিস বা কম্পোনেন্টগুলো শেয়ার করার জন্য ব্যবহৃত হচ্ছে।
একটি সাধারণ Angular অ্যাপ্লিকেশনে কনটেইনার এবং প্রেজেন্টেশনাল (বা ডাম্প) কম্পোনেন্টের মধ্যে বিভাজন করা উচিত। কনটেইনার কম্পোনেন্টগুলি সাধারণত লজিক এবং ডেটা ফেচিং পরিচালনা করে, যখন প্রেজেন্টেশনাল কম্পোনেন্টগুলি শুধু UI রেন্ডার করার জন্য দায়ী।
@Component({
selector: 'app-user-container',
templateUrl: './user-container.component.html'
})
export class UserContainerComponent {
users: User[];
constructor(private userService: UserService) {}
ngOnInit() {
this.userService.getUsers().subscribe(data => {
this.users = data;
});
}
}
@Component({
selector: 'app-user-list',
template: `
<ul>
<li *ngFor="let user of users">{{ user.name }}</li>
</ul>
`
})
export class UserListComponent {
@Input() users: User[];
}
এখানে, UserContainerComponent
কনটেইনার কম্পোনেন্ট এবং UserListComponent
প্রেজেন্টেশনাল কম্পোনেন্ট।
শেয়ার্ড মডিউল হলো এমন একটি মডিউল যা অ্যাপ্লিকেশনটির বিভিন্ন অংশে ব্যবহৃত কম্পোনেন্ট, ডিরেক্টিভ, প pipe এবং সার্ভিসগুলিকে শেয়ার করার জন্য ব্যবহৃত হয়। এটি কোডের পুনঃব্যবহারযোগ্যতা নিশ্চিত করে এবং অ্যাপ্লিকেশনটিকে আরও মডুলার ও স্কেলেবল করে তোলে।
@NgModule({
declarations: [CommonComponent, CommonDirective],
imports: [],
exports: [CommonComponent, CommonDirective] // Exporting for reuse
})
export class SharedModule {}
এখানে, SharedModule
একটি শেয়ার্ড মডিউল যা বিভিন্ন কম্পোনেন্ট এবং ডিরেক্টিভ শেয়ার করছে।
Lazy Loading অ্যাপ্লিকেশনের পারফরম্যান্স উন্নত করার জন্য একটি গুরুত্বপূর্ণ কৌশল। Angular-এ মডিউলগুলি Lazy Loading এর মাধ্যমে ডিম্যান্ড অনুযায়ী লোড করা যায়। এর ফলে অ্যাপ্লিকেশনটি দ্রুত লোড হয় এবং শুধুমাত্র প্রয়োজনীয় মডিউলই লোড হয়।
const routes: Routes = [
{
path: 'user',
loadChildren: () => import('./user/user.module').then(m => m.UserModule)
}
];
এখানে UserModule
শুধুমাত্র তখনই লোড হবে, যখন ইউজার /user
রাউটটি অ্যাক্সেস করবে।
Angular অ্যাপ্লিকেশনে মূল AppModule
-এ সব মডিউল ইম্পোর্ট করা হয়, তবে এখানে মডিউলগুলোর শ্রেণীবদ্ধতা বজায় রাখা উচিত যাতে অ্যাপটি আরও পরিষ্কার ও মেইনটেইনযোগ্য হয়।
@NgModule({
imports: [
BrowserModule,
AppRoutingModule, // Routing module
CoreModule, // Core services and components
SharedModule, // Shared components and services
FeatureModule // Feature-specific modules
],
bootstrap: [AppComponent]
})
export class AppModule {}
এখানে, অ্যাপ মডিউলে বিভিন্ন মডিউল আলাদা আলাদা ক্যাটেগরিতে ইম্পোর্ট করা হয়েছে, যেমন CoreModule, SharedModule, এবং FeatureModule।
মডিউল এবং ফাইলের নামের ক্ষেত্রে একটি কনভেনশন অনুসরণ করা উচিত, যা কোডের ব্যাখ্যাকে সহজতর করে তোলে। সাধারণত:
feature.module.ts
(যেমন: user.module.ts
)shared.module.ts
feature-name.component.ts
feature-name.service.ts
কোর মডিউল অ্যাপ্লিকেশনের জন্য গুরুত্বপূর্ণ সার্ভিস এবং একক ইন্সট্যান্স (singleton) ম্যানেজ করে, যেমন লগিং সার্ভিস, অথেন্টিকেশন সার্ভিস ইত্যাদি। অন্যদিকে শেয়ার্ড মডিউল সাধারণভাবে পুনঃব্যবহারযোগ্য কম্পোনেন্ট এবং ডিরেক্টিভ শেয়ার করার জন্য ব্যবহৃত হয়।
Angular অ্যাপ্লিকেশন তৈরির সময় মডিউল অর্গানাইজেশন এবং স্ট্রাকচার একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। উপরের বেস্ট প্রাকটিসগুলো অনুসরণ করলে কোডের পুনঃব্যবহারযোগ্যতা বৃদ্ধি পাবে, অ্যাপ্লিকেশনটি স্কেলেবল হবে এবং উন্নত পারফরম্যান্স পাওয়া যাবে। Angular অ্যাপ্লিকেশনের রক্ষণাবেক্ষণ এবং ভবিষ্যতে আপগ্রেড করার জন্য এই পদ্ধতিগুলি অনুসরণ করা অত্যন্ত প্রয়োজনীয়।
Read more